###############################################################################   
#### Replication Materials                                                 #### 
#### Kim, Nakka, Gopal, Desmrais, Mancinelli, Harden, Ko, Boehmke. 2021.   ####
#### Attention to the COVID-19 pandemic on Twitter:                        ####
#### Partisan differences among U.S. state legislators                     ####
#### Legislative Studies Quarterly                                         ####
###############################################################################  


###############################################################################
################################### Set Up ####################################
###############################################################################

# packages -------------------------

lapply(c('readr', 'stargazer', 'texreg', 'xtable', 'lme4', 'glmmTMB','plm',
         'lmtest', 'interplot','dummies','effects', 'ggthemes','caret', 
         'ggeffects', 'scales','ggrepel','sandwich','reshape2'), 
       require, 
       character.only = TRUE)

# read data set for regression -------------------------

path_data <- '/Users/taegyoon/Google Drive/spap_state/spap_state_attention/data/'
df <- read_csv(paste0(path_data, "spap_state_attention_regression.csv"))
df <- subset(df, select = -c(X1) )
df_rep <- df[which(df$governor_party== 'Republican'), ]
df_dem <- df[which(df$governor_party== 'Democrat'), ]


# set the panel structure -------------------------

plm_df_rep <- pdata.frame(x = df_rep, 
                          index = c('user.screen_name', 'week'))
plm_df_dem <- pdata.frame(x = df_dem, 
                          index = c('user.screen_name', 'week'))



###############################################################################
############## Table S8: Regression by Rep-governor Observations ##############
###############################################################################

# fit models -------------------------

rep_state <- plm(covid_relevant_1_log ~ 
                        state_case_pop + 
                        state_death_pop +
                        state_covid_policy + 
                        party_new +
                        state_abbrev +
                        week_new +
                        week_new_2 +
                        week_new_3,
                      data = plm_df_rep,
                      index = c('user.screen_name', 'week'),
                      model = 'random', 
                      effect = 'twoways')

rep_national <- plm(covid_relevant_1_log ~ 
                      national_case_pop + 
                      national_death_pop +
                      state_covid_policy + 
                      party_new +
                      state_abbrev +
                      week_new +
                      week_new_2 +
                      week_new_3,                                             
                    data = plm_df_rep,
                    index = c('user.screen_name', 'week'),
                    model = 'random', 
                    effect = 'twoways')


rep_all <- plm(covid_relevant_1_log ~ 
                      national_case_pop + 
                      national_death_pop +
                      state_covid_policy + 
                      party_new +
                      state_abbrev +
                      week_new +
                      week_new_2 +
                      week_new_3,                                             
                    data = plm_df_rep,
                    index = c('user.screen_name', 'week'),
                    model = 'random', 
                    effect = 'twoways')

rep_state_inter <- plm(covid_relevant_1_log ~ 
                         party_new*state_case_pop + 
                         party_new*state_death_pop +
                         party_new*state_covid_policy + 
                         state_abbrev +
                         week_new +
                         week_new_2 +
                         week_new_3,            
                       data = plm_df_rep,
                       index = c('user.screen_name', 'week_new'),
                       model = 'random', 
                       effect = 'twoways')

rep_national_inter <- plm(covid_relevant_1_log ~ 
                            party_new*national_case_pop + 
                            party_new*national_death_pop +
                            party_new*state_covid_policy + 
                            state_abbrev +
                            week_new +
                            week_new_2 +
                            week_new_3,            
                          data = plm_df_rep,
                          index = c('user.screen_name', 'week'),
                          model = 'random', 
                          effect = 'twoways')

rep_all_inter <- plm(covid_relevant_1_log ~ 
                       party_new*state_case_pop + 
                       party_new*state_death_pop +
                       party_new*national_case_pop + 
                       party_new*national_death_pop +
                       party_new*state_covid_policy + 
                       state_abbrev +
                       week_new +
                       week_new_2 +
                       week_new_3,            
                     data = plm_df_rep,
                     index = c('user.screen_name', 'week'),
                     model = 'random', 
                     effect = 'twoways')

rep_all_inter_ctl <- plm(covid_relevant_1_log ~ 
                           party_new*state_case_pop + 
                           party_new*state_death_pop +
                           party_new*national_case_pop + 
                           party_new*national_death_pop +
                           party_new*state_covid_policy + 
                           np_score +
                           major_cham +
                           state_abbrev +
                           week_new +
                           week_new_2 +
                           week_new_3,            
                         data = plm_df_rep,
                         index = c('user.screen_name', 'week'),
                         model = 'random', 
                         effect = 'twoways')

# adjust SE for serial correlation -------------------------

rep_state_adj <- coeftest(rep_state, 
                          vcovHC(rep_state, 
                                 method='arellano'))
rep_national_adj <- coeftest(rep_national, 
                             vcovHC(rep_national, 
                                    method='arellano'))
rep_all_adj <- coeftest(rep_all, 
                        vcovHC(rep_all, 
                               method='arellano'))
rep_state_inter_adj <- coeftest(rep_state_inter, 
                                vcovHC(rep_state_inter, 
                                       method='arellano'))
rep_national_inter_aj <- coeftest(rep_national_inter, 
                                  vcovHC(rep_national_inter, 
                                         method='arellano'))
rep_all_inter_adj <- coeftest(rep_all_inter, 
                              vcovHC(rep_all_inter, 
                                     method='arellano'))
rep_all_inter_ctl_adj <- coeftest(rep_all_inter_ctl, 
                                  vcovHC(rep_all_inter_ctl, 
                                         method='arellano'))


###############################################################################
######################## Generate Latex Code : Table S8 #######################
###############################################################################

# get information for the last six rows -------------------------

texreg(
  list(rep_state,
       rep_national,
       rep_all,
       rep_state_inter,
       rep_national_inter,
       rep_all_inter,
       rep_all_inter_ctl),
  omit.coef = 'abbrev',
  digits = 3,
  caption = 'Panel Regression Model (State Fixed Effect and Legislator-week Random Effect): 
  Rep-governor Observations, Population Normalized + Three-fold Party Variable + Week Polynomial + Logged DV (1 added)',
  custom.coef.names = c('(Intercept)',
                        'State New Cases (per 10k)',
                        'State New Deaths (per 10k)',
                        'State COVID-19 Policies',
                        'Other',
                        'Republican',
                        'Week',
                        'Week (quadratic)',
                        'Week (cubic)',
                        'National New Cases (per 10k)',
                        'National New Deaths (per 10k)',
                        'Other * State New Cases (per 10k)',
                        'Republican * State New Cases (per 10k)',
                        'Other * State New Deaths (per 10k)',
                        'Republican * State New Deaths (per 10k)',
                        'Other * State COVID-19 Policies',
                        'Republican * State COVID-19 Policies',
                        'Other * National New Cases (per 10k)',
                        'Republican * National New Cases (per 10k)',
                        'Other * National New Deaths (per 10k)',
                        'Republican * National New Deaths (per 10k)',
                        'Legislator Ideology',
                        'Chamber Majority Status'
                        )
  )

# get information for betas and corresponding standard errors -------------------------

texreg(
  list(rep_state_adj,
       rep_national_adj,
       rep_all_adj,
       rep_state_inter_adj,
       rep_national_inter_adj,
       rep_all_inter_adj,
       rep_all_inter_ctl_adj),
  omit.coef = 'abbrev',
  digits = 3,
  caption = 'Panel Regression Model (State Fixed Effect and Legislator-week Random Effect): 
  Rep-governor Observations, Population Normalized + Three-fold Party Variable + Week Polynomial + Logged DV (1 added)',
  custom.coef.names = c('(Intercept)',
                        'State New Cases (per 10k)',
                        'State New Deaths (per 10k)',
                        'State COVID-19 Policies',
                        'Other',
                        'Republican',
                        'Week',
                        'Week (quadratic)',
                        'Week (cubic)',
                        'National New Cases (per 10k)',
                        'National New Deaths (per 10k)',
                        'Other * State New Cases (per 10k)',
                        'Republican * State New Cases (per 10k)',
                        'Other * State New Deaths (per 10k)',
                        'Republican * State New Deaths (per 10k)',
                        'Other * State COVID-19 Policies',
                        'Republican * State COVID-19 Policies',
                        'Other * National New Cases (per 10k)',
                        'Republican * National New Cases (per 10k)',
                        'Other * National New Deaths (per 10k)',
                        'Republican * National New Deaths (per 10k)',
                        'Legislator Ideology',
                        'Chamber Majority Status'
                        )
  )